#include "config.h"
+#include <gio/gfiledescriptorbased.h>
+
#include "ostree-fetcher.h"
#include "ostree.h"
#include "otutil.h"
goffset filesize;
GError *local_error = NULL;
+ /* Close it here since we do an async fstat(), where we don't want
+ * to hit a bad fd.
+ */
if (pending->out_stream)
- g_hash_table_remove (pending->self->output_stream_set, pending->out_stream);
+ {
+ if (!g_output_stream_close (pending->out_stream, pending->cancellable, &local_error))
+ goto out;
+ g_hash_table_remove (pending->self->output_stream_set, pending->out_stream);
+ }
pending->state = OSTREE_FETCHER_STATE_COMPLETE;
file_info = g_file_query_info (pending->out_tmpfile, OSTREE_GIO_FAST_QUERYINFO,
OstreeFetcherPendingURI *pending = user_data;
GError *local_error = NULL;
gs_unref_object SoupMessage *msg = NULL;
- GOutputStreamSpliceFlags flags = G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET;
+ GOutputStreamSpliceFlags flags = G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE;
pending->state = OSTREE_FETCHER_STATE_COMPLETE;
pending->request_body = soup_request_send_finish ((SoupRequest*) object,
while (g_hash_table_iter_next (&hiter, &key, &value))
{
GFileOutputStream *stream = key;
- GFileInfo *finfo;
-
- finfo = g_file_output_stream_query_info (stream, "standard::size",
- NULL, NULL);
- if (finfo)
+ struct stat stbuf;
+
+ if (G_IS_FILE_DESCRIPTOR_BASED (stream))
{
- ret += g_file_info_get_size (finfo);
- g_object_unref (finfo);
+ if (gs_stream_fstat ((GFileDescriptorBased*)stream, &stbuf, NULL, NULL))
+ ret += stbuf.st_size;
}
}
if (pull_data->progress)
{
update_timeout = g_timeout_source_new_seconds (1);
+ g_source_set_priority (update_timeout, G_PRIORITY_HIGH);
g_source_set_callback (update_timeout, update_progress, pull_data, NULL);
g_source_attach (update_timeout, g_main_loop_get_context (pull_data->loop));
g_source_unref (update_timeout);